﻿package com.core
{
    import flash.utils.*;

    public class ModelProxy extends Object
    {
        private static var proxys:Dictionary = new Dictionary();
        public static var globalproxy:Obproxy = new Obproxy({}, "global");

        public function ModelProxy()
        {
            return;
        }// end function

        public static function register(param1:String, param2:Object = null) : Obproxy
        {
            var _loc_3:Obproxy = null;
            if (param2 == null)
            {
                param2 = {};
            }
            if (proxys[param1])
            {
                _loc_3 = proxys[param1];
                _loc_3.setItem(param2);
            }
            else
            {
                _loc_3 = new Obproxy(param2, param1);
            }
            proxys[param1] = _loc_3;
            return _loc_3;
        }// end function

        public static function changeGlobal(param1:String, param2:Object) : void
        {
            globalproxy[param1] = param2;
            return;
        }// end function

        public static function change(param1:String, param2:String, param3:Object) : void
        {
            var _loc_4:Array = null;
            var _loc_5:String = null;
            var _loc_6:Object = null;
            var _loc_7:Object = null;
            var _loc_8:* = proxys[param1];
            if (!proxys[param1])
            {
                _loc_8 = new Obproxy({}, param1);
                proxys[param1] = _loc_8;
            }
            if (param2 == "state")
            {
                _loc_8.state = param3;
            }
            else if (param2 == "action")
            {
                _loc_8.action = param3;
            }
            else if (param2.indexOf(".") > -1)
            {
                _loc_4 = param2.split(".");
                _loc_5 = _loc_4.shift();
                _loc_6 = _loc_8[_loc_5];
                if (_loc_6 == null)
                {
                    _loc_6 = new Object();
                }
                _loc_7 = _loc_6;
                while (_loc_4.length != 1)
                {
                    
                    if (_loc_6 == null)
                    {
                        _loc_8[param2] = param3;
                        return;
                    }
                    _loc_6 = _loc_6[_loc_4.shift()];
                }
                if (_loc_6 != null)
                {
                    _loc_6[_loc_4[0]] = param3;
                }
                _loc_8[_loc_5] = _loc_7;
            }
            else
            {
                _loc_8[param2] = param3;
            }
            return;
        }// end function

        public static function addObserver(param1:String, param2:Obinder) : void
        {
            var _loc_3:* = proxys[param1];
            if (_loc_3)
            {
                _loc_3.addObserver(param2);
            }
            else
            {
                _loc_3 = register(param1);
                _loc_3.addObserver(param2);
            }
            return;
        }// end function

        public static function setState(param1:String, param2:String) : void
        {
            change(param1, "state", param2);
            return;
        }// end function

        public static function setAction(param1:String, param2:String) : void
        {
            change(param1, "action", param2);
            return;
        }// end function

        public static function getValue(param1:String, param2:String)
        {
            var _loc_3:Array = null;
            var _loc_4:String = null;
            var _loc_5:Object = null;
            var _loc_6:* = proxys[param1];
            if (proxys[param1])
            {
                if (param2.indexOf(".") > -1)
                {
                    _loc_3 = param2.split(".");
                    _loc_4 = _loc_3.shift();
                    _loc_5 = _loc_6[_loc_4];
                    while (_loc_3.length > 0)
                    {
                        
                        if (_loc_5 == null)
                        {
                            return null;
                        }
                        _loc_5 = _loc_5.valueOf()[_loc_3.shift()];
                    }
                    return _loc_5;
                }
                else
                {
                    if (param2 == "state")
                    {
                        return _loc_6.state;
                    }
                    if (param2 == "action")
                    {
                        return _loc_6.action;
                    }
                    return _loc_6[param2];
                }
            }
            else
            {
                return null;
            }
        }// end function

        public static function getProxy(param1:String) : Obproxy
        {
            return proxys[param1];
        }// end function

        public static function deleteProxy(param1:String) : void
        {
            var _loc_2:* = proxys[param1];
            if (_loc_2)
            {
                _loc_2.deleteObservers();
            }
            delete proxys[param1];
            return;
        }// end function

        public static function deleteObserver(param1:String, param2:Obinder) : void
        {
            var _loc_3:* = proxys[param1];
            if (_loc_3)
            {
                _loc_3.deleteObserver(param2);
            }
            return;
        }// end function

    }
}
